package cn.myblog.ainblog.conroller.backstage;

import cn.myblog.ainblog.dto.TagDTO;
import cn.myblog.ainblog.model.TagModel;
import cn.myblog.ainblog.service.TagService;
import cn.myblog.ainblog.vo.PageVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * @author Dovaior
 * @Description 关于tag的控制器
 * @create 2021-04-09 10:41
 **/
@Controller
@RequestMapping("/backstage")
public class BackstageTagController {
    @Autowired
    private TagService service;

    /**
     * 页面展示（分页）
     * @param current 当前页码
     * @param model 封装信息
     * @return 返回页面
     */
    @GetMapping("/queryTagList/{current}")
    public String queryTagList(@PathVariable Integer current, Model model){
        //每页包含10条
        Integer size = 13;
        PageVO<TagModel> tagVO = new PageVO<TagModel>();
        IPage<TagModel> page = new Page<>(current,size);
        //执行分页查询
        service.selectTagPage(page);
        //为分页实体类赋值
        tagVO.setCurrent(current);
        tagVO.setSize(size);
        //将总条数转换为页数传递给前端
        Long pageSize = page.getTotal() % size;
        if (pageSize == 0){
            tagVO.setTotal(page.getTotal()/size);
        }else{
            //不能整除页码加一
            tagVO.setTotal((page.getTotal()/size)+1);
        }
        //将查询到的信息封装到pageList当中
        tagVO.setPageList(page.getRecords());
        model.addAttribute("tagVO",tagVO);
        return "backstage/backstage-tagList";
    }

    /**
     * 添加标签
     * @param tagDTO 获取前端表单数据
     * @return 返回标志
     */
    @ResponseBody
    @PostMapping("/addTag")
    public boolean addTag(TagDTO tagDTO){
        TagModel tagModel = new TagModel();
        BeanUtils.copyProperties(tagDTO,tagModel);
        int i = service.addTag(tagModel);
        boolean flag = false;
        if(i == 1){
            //添加成功
            flag = true;
        }else{
            //添加失败
            flag = false;
        }
        return flag;
    }

    /**
     * 根据Name查询，主要用于验证是否已存在该标签
     * @param tagName 从前端获取的tagName
     * @return 返回标志
     */
    @ResponseBody
    @GetMapping("/selectByName/{tagName}")
    public boolean selectByName(@PathVariable String tagName){
        //定义一个标志
        boolean flag = false;
        QueryWrapper<TagModel> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("tag_name",tagName);
        //根据Name查询封装入Model
        TagModel tagModel = service.selectByName(queryWrapper);
        //如果tagModel是null，说明这个标签之前未添加过
        if (tagModel == null){
            //返回false给前端
            return flag;
        }else{
            //否则，返回true给前端
            flag = true;
        }
        return flag;
    }

    /**
     * 根据ID值进行查询，主要用于回显数据
     * @param tagId 从前端获取的ID值
     * @return 返回封装信息给前端
     */
    @ResponseBody
    @GetMapping("/updateTagById/{tagId}")
    public TagDTO updateTagById(@PathVariable String tagId){
        TagModel tagModel = service.selectById(tagId);
        TagDTO tagDTO = new TagDTO();
        BeanUtils.copyProperties(tagModel,tagDTO);
        return tagDTO;
    }

    /**
     * 执行更新操作
     * @param tagDTO 从前端获取的表单信息
     * @return 返回标志
     */
    @ResponseBody
    @PostMapping("/updateTag")
    public boolean updateTag(TagDTO tagDTO){
        //定义一个标志
        boolean flag = false;
        TagModel tagModel = new TagModel();
        BeanUtils.copyProperties(tagDTO,tagModel);
        //执行更新操作
        int i = service.updateTag(tagModel);
        //判断更新状态
        if (i != 0) {
            flag = true;
        }else{
            flag = false;
        }
        //给前端返回值
        return flag;
    }

    /**
     * 删除操作（根据ID值）
     * @param tagId 从前端获取的ID值
     * @return 返回标志给前端
     */
    @ResponseBody
    @GetMapping("/deleteTagById/{tagId}")
    public boolean deleteTagById(@PathVariable String tagId){
        boolean flag = false;
        int i = service.deleteById(tagId);
        if (i != 0){
            //删除成功
            flag = true;
        }else{
            //删除失败
            flag = false;
        }
        return flag;
    }

    /**
     * 根据tagId查询博文ID，用于删除标签时检测是否存在博文引用这个标签
     * @param tagId 标签ID
     * @return 返回标志
     */
    @ResponseBody
    @GetMapping("/queryArticleIdByTagId/{tagId}")
    public boolean queryArticleIdByTagId(@PathVariable String tagId){
        boolean flag = service.queryArticleIdByTagId(tagId);
//        System.out.println("flag==========="+flag);
        return flag;
    }
}
